﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
using DAO;

namespace RegraNegocio
{
    public class PedidoBO
    {

        private static PedidoBO singleton = null;

        private PedidoBO(){ }

        public static PedidoBO getInstance() {
            if (singleton == null) {
                singleton = new PedidoBO();
            }

            return singleton;
        }

        public bool hasPedidos(Cliente cliente) 
        {
            return PedidoDAO.getInstance().hasPedidos(cliente);
        }

        public void inserirPedido(Pedido pedido, List<ItemPedido> itemsPedido) {
            int codigoPedido = 0;

            try {

                pedido.ValorTotal = this.calcularValorTotal(itemsPedido);

                codigoPedido = PedidoDAO.getInstance().inserir(pedido);

                if (codigoPedido > 0) {
                    itemsPedido = this.atualizarReferenciaPedido(itemsPedido, codigoPedido);

                    this.inserirItensPedido(itemsPedido);

                    ProdutoBO.getInstance().atualizarQuantidadeEstoqueProdutos(itemsPedido);
                }
            }catch(Exception cause){
                throw cause;
            }

        }

        private decimal calcularValorTotal(List<ItemPedido> items) {
            decimal valorTotal = 0;

            foreach (ItemPedido item in items)
            {
                valorTotal += (item.Quantidade * ProdutoDAO.getInstance().recuperarValorProduto(item.Produto));
            }

            return valorTotal;
        }

        private List<ItemPedido> atualizarReferenciaPedido(List<ItemPedido> items, int codigoPedido) {
            foreach (ItemPedido item in items)
            {
                item.Pedido = new Pedido(codigoPedido);
            }

            return items;
        }

        private void inserirItensPedido(List<ItemPedido> itemsPedido) {

            foreach (ItemPedido item in itemsPedido)
            {
                ItemPedidoDAO.getInstance().inserir(item);
            }
        }

        public Pedido consultar(Pedido pedido) 
        {
            return PedidoDAO.getInstance().consultar(pedido);
        }

        public void deletar(Pedido pedido) 
        {
            ItemPedidoBO.getInstance().deletarItensPedido(pedido);
            PedidoDAO.getInstance().deletarPedido(pedido);
        }

    }
}